package com.yhd.array;

/**
 * 数组的抽象父类
 *
 * @author 二十
 */
public abstract class AbstractArray<T> {
    /**
     * 数组中元素个数
     *
     * @return
     */
    public abstract int getSize();

    /**
     * 数组最大容量
     *
     * @return
     */
    public abstract int getCapacity();

    /**
     * 是否为空
     *
     * @return
     */
    public abstract boolean isEmpty();

    /**
     * 指定位置添加
     *
     * @param data
     * @param index
     */
    public abstract void addIndex(T data, int index);

    /**
     * 头插
     *
     * @param data
     */
    public abstract void addFirst(T data);

    /**
     * 尾插
     *
     * @param data
     */
    public abstract void addLast(T data);

    /**
     * 指定位置删除
     *
     * @param index
     * @return
     */
    public abstract T deleteIndex(int index);

    /**
     * 头删
     *
     * @return
     */
    public abstract T deleteFirst();

    /**
     * 尾删
     *
     * @return
     */
    public abstract T deleteLast();

    /**
     * 获取指定位置元素
     *
     * @param index
     * @return
     */
    public abstract T get(int index);

    /**
     * 修改指定位置元素
     *
     * @param data
     * @param index
     */
    public abstract void set(T data, int index);

    /**
     * 是否包含给定元素
     *
     * @param data
     * @return
     */
    public abstract boolean contains(T data);

    /**
     * 查找某一元素的索引位置
     *
     * @param data
     * @return
     */
    public abstract int find(T data);

    /**
     * 清空数组
     */
    public abstract void clear();

    /**
     * 扩容 需要子类显式重写
     *
     * @param capacity
     */
    protected void resize(int capacity) {
        System.out.println("数组发生扩容：扩容后容量为：" + capacity);
    }

    /**
     * 遍历输出数组中的所有元素
     *
     * @return
     */
    @Override
    public String toString() {
        return super.toString();
    }


}